Schritt 18: Unsere Instanz wird von außen per IPv4 erreichbar

Vorwort

Im letzten Schritt wurde das komplette Netzwerk eingerichtet und es ist nun an der Zeit, die Instanz von außen zu erreichen (u.a. per ICMP und SSH Zugriff).

Floating-IP

Den Anfang macht die öffentliche IP-Adresse, welche auch als Ressource hinzugefügt wird. (Der zugehörige Typ lautet OS::Neutron::FloatingIP).

Wichtig ist, dass der Floating IP der entsprechende Port und welches das öffentliche Netz genutzt wird, mitgeteilt wird:

heat_template_version: 2014-10-16

parameters:
    key_name:
        type: string
    public_network_id:
        type: string
        default: provider

resources:

    Instanz:
        type: OS::Nova::Server
        properties:
            key_name: { get_param: key_name }
            image: Ubuntu 16.04 Xenial Xerus - Latest
            flavor: m1.small

    Netzwerk:
        type: OS::Neutron::Net
        properties:
            name: BeispielNetzwerk

    Port:
        type: OS::Neutron::Port
        properties:
            network: { get_resource: Netzwerk }

    Router:
        type: OS::Neutron::Router
        properties:
            external_gateway_info: { "network": { get_param: public_network_id } }
            name: BeispielRouter

    Subnet:
        type: OS::Neutron::Subnet
        properties:
            name: BeispielSubnet
            dns_nameservers:
                - 8.8.8.8
                - 8.8.4.4
            network: { get_resource: Netzwerk }
            ip_version: 4
            cidr: 10.0.0.0/24
            allocation_pools:
                - { start: 10.0.0.10, end: 10.0.0.250 }

    Router_Subnet_Bridge:
        type: OS::Neutron::RouterInterface
        depends_on: Subnet
        properties:
            router: { get_resource: Router }
            subnet: { get_resource: Subnet }

    Floating_IP:
        type: OS::Neutron::FloatingIP
        properties:
            floating_network: { get_param: public_network_id }
            port_id: { get_resource: Port }

Security Groups

Wird das oben geschriebene Template gestartet, würde die Instanz erstellt werden, nur kann diese aufgrund der voreingestellten Security Group nicht erreicht werden.

Um dies zu ändern, wird eine Security Group (Typ = OS::Neutron::SecurityGroup).

Auch gibt es einige Besonderheiten zu beachten, es wird zum einen mit Regeln (rules) gearbeitet und zum anderen müssen selbige noch dem Port zugewiesen werden.

So kann die direction (Richtung des Traffics) in ingress (eingehend) oder egress (ausgehend) eingeteilt, der entsprechende Port oder auch die Range der Ports definiert und auch das Protokoll festgelegt werden.

Außerdem kann mit remote_ip_prefix noch festgelegt werden, wer die Instanz erreicht (falls nötig).

heat_template_version: 2014-10-16

parameters:
    key_name:
        type: string
    public_network_id:
        type: string
        default: provider

resources:

    Instanz:
        type: OS::Nova::Server
        properties:
            key_name: { get_param: key_name }
            image: Ubuntu 16.04 Xenial Xerus - Latest
            flavor: m1.small

    Netzwerk:
        type: OS::Neutron::Net
            properties:
            name: BeispielNetzwerk

    Port:
        type: OS::Neutron::Port
        properties:
            network: { get_resource: Netzwerk }

    Router:
        type: OS::Neutron::Router
        properties:
            external_gateway_info: { "network": { get_param: public_network_id } }
            name: BeispielRouter

    Subnet:
        type: OS::Neutron::Subnet
        properties:
            name: BeispielSubnet
            dns_nameservers:
                - 8.8.8.8
                - 8.8.4.4
            network: { get_resource: Netzwerk }
            ip_version: 4
            cidr: 10.0.0.0/24
            allocation_pools:
                - { start: 10.0.0.10, end: 10.0.0.250 }

    Router_Subnet_Bridge:
        type: OS::Neutron::RouterInterface
        depends_on: Subnet
        properties:
            router: { get_resource: Router }
            subnet: { get_resource: Subnet }

    Floating_IP:
        type: OS::Neutron::FloatingIP
        properties:
            floating_network: { get_param: public_network_id }
            port_id: { get_resource: Port }

    Sec_SSH:
        type: OS::Neutron::SecurityGroup
        properties:
            description: Diese Security Group erlaubt den eingehenden SSH-Traffic über Port22 und ICMP
            name: Ermöglicht SSH (Port22) und ICMP
            rules:
                - { direction: ingress, remote_ip_prefix: 0.0.0.0/0, port_range_min: 22, port_range_max: 22, protocol: tcp }
                - { direction: ingress, remote_ip_prefix: 0.0.0.0/0, protocol: icmp }

Abschluss

Die erstellte Instanz ist von außen erreichbar inklusive einer öffentliche IP.

Im nächsten Schritt wird die Instanz per CloudConfig angepasst.